#include <bits/stdc++.h>

using namespace std;

class Solution
{
public:
    // int findLength(vector<int> &nums1, vector<int> &nums2)
    // {
    //     int max_length = 0;
    //     for (int i = 0; i < (int)nums1.size(); i++)
    //     {
    //         for (int j = 0; j < (int)nums2.size(); j++)
    //         {
    //             int count = 0;
    //             for (int x = i, y = j; x < (int)nums1.size() && y < (int)nums2.size(); x++, y++)
    //             {
    //                 if (nums1[x] == nums2[y])
    //                 {
    //                     count++;
    //                 }
    //                 else
    //                 {
    //                     break;
    //                 }
    //             }
    //             max_length = max(max_length, count);
    //         }
    //     }
    //     return max_length;
    // }

    int findLength(vector<int> &nums1, vector<int> &nums2)
    {
        vector<vector<int>> dp(nums1.size(), vector<int>(nums2.size(), 0));
        int length1 = nums1.size();
        int length2 = nums2.size();
        for (int i = 0; i < length1; i++)
        {
            if (nums1[i] == nums2[0])
            {
                dp[i][0] = 1;
            }
        }
        for (int j = 0; j < length2; j++)
        {
            if (nums1[0] == nums2[j])
            {
                dp[0][j] = 1;
            }
        }
        int max_length = 0;
        for (int i = 0; i < length1; i++)
        {
            for (int j = 0; j < length2; j++)
            {
                if (nums1[i] == nums2[j] && i > 0 && j > 0)
                {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
                if (dp[i][j] > max_length)
                {
                    max_length = dp[i][j];
                }
            }
        }
        return max_length;
    }
};
int main()
{
    vector<int> nums1{1, 2, 3, 2, 1};
    vector<int> nums2{3, 2, 1, 4, 7};
    Solution sol;
    cout << sol.findLength(nums1, nums2) << endl;
    return 0;
}